/*
 * @Author: PoJun
 * @Date: 2024-06-20 15:39:41
 * @LastEditors: PoJun
 * @LastEditTime: 2024-06-25 14:03:53
 * @Message: Nothing
 */
import Vue from "vue"
import Vuex from "vuex"
Vue.use(Vuex)

let lifeData = {}

try {
  // lifeData 本地存储变量名最好以工程名为前缀, 如下
  // 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
  lifeData = uni.getStorageSync("empty_lifeData")
} catch (e) {
  console.log(e)
}

// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
const saveStateKeys = ["vuex_theme"]
// 保存变量到本地存储中
const saveLifeData = function (key, value) {
  // 判断变量名是否在需要存储的数组中
  if (saveStateKeys.indexOf(key) !== -1) {
    // 获取本地存储的lifeData对象，将变量添加到对象中
    let tmp = uni.getStorageSync("empty_lifeData")
    // 第一次打开APP，不存在lifeData变量，故放一个{}空对象
    tmp = tmp || {}
    tmp[key] = value
    // 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
    uni.setStorageSync("empty_lifeData", tmp)
  }
}

const store = new Vuex.Store({
  state: {
    // 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量
    // 色彩相关
    vuex_theme: lifeData.vuex_theme
      ? lifeData.vuex_theme
      : {
          "--theme-primary-color": "#3c9cff", // 主题色
          "--theme-primary-dark-color": "#307ccc", // 主题色深色
          "--theme-primary-disabled-color": "#9dcdff", // 主题色禁用
          "--theme-primary-light-color": "#ecf5ff" // 主题色浅
        },
    vuex_image_list: [] // 打开轮播时的图片列表
  },
  mutations: {
    $uStore(state, payload) {
      // 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
      const nameArr = payload.name.split(".")
      let saveKey = ""
      const len = nameArr.length
      if (nameArr.length >= 2) {
        let obj = state[nameArr[0]]
        for (let i = 1; i < len - 1; i++) {
          obj = obj[nameArr[i]]
        }
        obj[nameArr[len - 1]] = payload.value
        ;[saveKey] = nameArr
      } else {
        // 单层级变量，在state就是一个普通变量的情况
        state[payload.name] = payload.value
        saveKey = payload.name
      }
      // 保存变量到本地，见顶部函数定义
      saveLifeData(saveKey, state[saveKey])
    }
  },
  actions: {}
})

export default store
